try fix caching#735
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Fix all issues with AI agents
In @.github/workflows/analyzers.yml:
- Around line 10-12: Replace the Conan 1.x env var CONAN_USER_HOME with the
Conan 2 correct variable CONAN_HOME (i.e., set CONAN_HOME: "${{ github.workspace
}}/release/") so the conan cache restore/save steps target the actual Conan 2
cache, and remove the unused CONAN_USER_HOME_SHORT variable (or rename and wire
it up if intended) to avoid dead config; ensure any workflow steps that
referenced CONAN_USER_HOME now reference CONAN_HOME (and update any cache key
names if they relied on the old variable).
In @.github/workflows/ci v2.yml:
- Around line 19-21: The workflow is setting Conan 1.x variables CONAN_USER_HOME
and CONAN_USER_HOME_SHORT which are ignored by Conan 2; replace those env keys
with CONAN_HOME and remove or stop using CONAN_USER_HOME_SHORT, and update every
reference that reads env.CONAN_USER_HOME (e.g., in the cache steps that
reference env.CONAN_USER_HOME) to use env.CONAN_HOME instead so the cache/config
directory aligns with Conan 2; ensure the env block defines CONAN_HOME: "${{
github.workspace }}/release/" (or equivalent) and update any cache restore/save
keys that previously used CONAN_USER_HOME to use CONAN_HOME.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In `@conanfile.py`:
- Around line 47-49: The protobuf requirement conflicts with grpc/1.72.0's
transitive protobuf; update the self.requires entry(s) in conanfile.py to
resolve the conflict by either removing the explicit
self.requires("protobuf/6.32.1") line to allow gRPC's transitive
protobuf/5.27.0, changing it to self.requires("protobuf/5.27.0") to match gRPC,
or keep protobuf/6.32.1 but add override=True on that self.requires call to
force the newer protobuf (accepting potential ABI risk); modify the
self.requires("protobuf/6.32.1") statement accordingly.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In `@conanfile.py`:
- Around line 46-49: The commented-out dependency lines for protobuf/6.32.1 and
libmount/2.39 in the block gated by self.options.with_grpc should either be
removed or documented: delete the two commented requires lines if you want to
keep the codebase clean (since grpc/1.72.0 from ConanCenter will pull protobuf
transitively and with_libsystemd=False disables libsystemd/libmount needs), or
replace them with a short explanatory comment (e.g., "protobuf is pulled
transitively by grpc; libmount override unnecessary because
with_libsystemd=False") so future maintainers understand why they are omitted;
update the comment near the grpc/1.72.0 requires line accordingly.
| if self.options.with_grpc: | ||
| self.requires("grpc/1.65.0", transitive_libs=True, transitive_headers=True) | ||
| # self.requires("protobuf/5.26.1") | ||
| self.requires("libmount/2.39", override=True) | ||
| self.requires("grpc/1.72.0", transitive_libs=True, transitive_headers=True) | ||
| # self.requires("protobuf/6.32.1") | ||
| # self.requires("libmount/2.39", override=True) |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# First, let's see the full context of the conanfile.py, especially around lines 27 and 46-49
fd conanfile.py -x wc -l {}Repository: victimsnino/ReactivePlusPlus
Length of output: 89
🏁 Script executed:
# Get the relevant sections of conanfile.py
cat -n conanfile.py | sed -n '20,55p'Repository: victimsnino/ReactivePlusPlus
Length of output: 1586
🌐 Web query:
grpc 1.72.0 conan center index available
💡 Result:
Yes—grpc/1.72.0 is available on ConanCenter (Conan 2). The ConanCenter recipe page lists grpc/1.72.0 and shows install usage via:
[requires]
grpc/1.72.0
It also indicates the recipe revision date as 2025-10-30 and that binaries are available for Linux/Windows/macOS (including Apple Silicon) and Windows ARM64. [1]
Remove or document the commented-out dependency lines.
grpc/1.72.0 is available on ConanCenter. Since with_libsystemd=False disables libsystemd support in grpc (line 27), the libmount/2.39 override is no longer needed and can be safely removed. The commented-out protobuf/6.32.1 line aligns with letting grpc pull protobuf transitively.
Either remove these commented lines entirely or add a brief comment explaining why they're kept (e.g., "/* Protobuf pulled by grpc transitively */") to avoid confusion for future maintainers.
🤖 Prompt for AI Agents
In `@conanfile.py` around lines 46 - 49, The commented-out dependency lines for
protobuf/6.32.1 and libmount/2.39 in the block gated by self.options.with_grpc
should either be removed or documented: delete the two commented requires lines
if you want to keep the codebase clean (since grpc/1.72.0 from ConanCenter will
pull protobuf transitively and with_libsystemd=False disables
libsystemd/libmount needs), or replace them with a short explanatory comment
(e.g., "protobuf is pulled transitively by grpc; libmount override unnecessary
because with_libsystemd=False") so future maintainers understand why they are
omitted; update the comment near the grpc/1.72.0 requires line accordingly.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In `@conanfile.py`:
- Line 47: Update the grpc dependency declaration in conanfile.py: replace the
non-existent version string used in self.requires("grpc/1.70.0",
transitive_libs=True, transitive_headers=True) with a valid ConanCenter version
(e.g., "grpc/1.72.0" or "grpc/1.71.0"); ensure the new version is referenced
exactly in the same self.requires call so the package resolver finds the
available release.
BENCHMARK RESULTS (AUTOGENERATED)
|
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| Subscribe empty callbacks to empty observable | 303.13 ns | 1.87 ns | 1.87 ns | 1.00 | 1.87 ns |
| Subscribe empty callbacks to empty observable via pipe operator | 307.78 ns | 1.87 ns | 1.88 ns | 0.99 | 1.86 ns |
Sources
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| from array of 1 - create + subscribe + immediate | 691.29 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| from array of 1 - create + subscribe + current_thread | 1058.76 ns | 3.73 ns | 3.73 ns | 1.00 | 3.73 ns |
| concat_as_source of just(1 immediate) create + subscribe | 2318.65 ns | 114.57 ns | 115.24 ns | 0.99 | 114.61 ns |
| defer from array of 1 - defer + create + subscribe + immediate | 759.27 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| interval - interval + take(3) + subscribe + immediate | 2153.35 ns | 59.59 ns | 59.58 ns | 1.00 | 59.63 ns |
| interval - interval + take(3) + subscribe + current_thread | 3035.60 ns | 32.63 ns | 32.66 ns | 1.00 | 34.47 ns |
| from array of 1 - create + as_blocking + subscribe + new_thread | 33467.30 ns | 33056.17 ns | 30281.92 ns | 1.09 | 32524.79 ns |
| from array of 1000 - create + as_blocking + subscribe + new_thread | 44748.70 ns | 55185.05 ns | 54929.43 ns | 1.00 | 54894.50 ns |
| concat_as_source of just(1 immediate) and just(1,2 immediate)create + subscribe | 3571.52 ns | 140.90 ns | 137.07 ns | 1.03 | 153.70 ns |
Filtering Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+take(1)+subscribe | 1108.65 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just+filter(true)+subscribe | 843.01 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just(1,2)+skip(1)+subscribe | 1008.46 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just(1,1,2)+distinct_until_changed()+subscribe | 895.58 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just(1,2)+first()+subscribe | 1275.63 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just(1,2)+last()+subscribe | 931.44 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just+take_last(1)+subscribe | 1152.80 ns | 18.64 ns | 18.64 ns | 1.00 | 19.57 ns |
| immediate_just(1,2,3)+element_at(1)+subscribe | 859.25 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
Schedulers
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate scheduler create worker + schedule | 284.51 ns | 0.47 ns | 1.55 ns | 0.30 | 1.55 ns |
| current_thread scheduler create worker + schedule | 372.81 ns | 4.35 ns | 4.35 ns | 1.00 | 4.66 ns |
| current_thread scheduler create worker + schedule + recursive schedule | 834.46 ns | 61.28 ns | 60.99 ns | 1.00 | 61.57 ns |
Transforming Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+map(v*2)+subscribe | 866.00 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just+scan(10, std::plus)+subscribe | 906.37 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just+flat_map(immediate_just(v*2))+subscribe | 2361.17 ns | 124.94 ns | 124.16 ns | 1.01 | 210.36 ns |
| immediate_just+buffer(2)+subscribe | 1576.63 ns | 13.98 ns | 13.99 ns | 1.00 | 17.41 ns |
| immediate_just+window(2)+subscribe + subscsribe inner | 2418.15 ns | 1262.66 ns | 1292.53 ns | 0.98 | 1408.19 ns |
Conditional Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+take_while(false)+subscribe | 825.17 ns | - | - | 0.00 | - |
| immediate_just+take_while(true)+subscribe | 837.17 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
Utility Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just(1)+subscribe_on(immediate)+subscribe | 2006.77 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
Combining Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe | 3511.93 ns | 157.39 ns | 163.08 ns | 0.97 | 216.06 ns |
| immediate_just(1) + merge_with(immediate_just(2)) + subscribe | 3785.52 ns | 156.39 ns | 157.67 ns | 0.99 | 188.25 ns |
| immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe | - | 134.10 ns | 140.80 ns | 0.95 | 193.46 ns |
| immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe | 3647.45 ns | 367.97 ns | 402.64 ns | 0.91 | 386.20 ns |
| immediate_just(1) + zip(immediate_just(2)) + subscribe | 2185.08 ns | 222.37 ns | 221.90 ns | 1.00 | 210.16 ns |
| immediate_just(immediate_just(1), immediate_just(1)) + concat() + subscribe | 3206.76 ns | 233.30 ns | 230.11 ns | 1.01 | 269.57 ns |
Subjects
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| publish_subject with 1 observer - on_next | 34.77 ns | 14.79 ns | 14.79 ns | 1.00 | 14.96 ns |
| subscribe 100 observers to publish_subject | 202553.60 ns | 17473.83 ns | 19401.95 ns | 0.90 | 18042.19 ns |
| 100 on_next to 100 observers to publish_subject | 28005.93 ns | 16898.25 ns | 26117.59 ns | 0.65 | 16871.10 ns |
Scenarios
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| basic sample | 1400.76 ns | 14.01 ns | 13.06 ns | 1.07 | 22.36 ns |
| basic sample with immediate scheduler | 1461.90 ns | 5.28 ns | 5.28 ns | 1.00 | 16.46 ns |
| mix operators with disposables and without disposables | 6389.72 ns | 1443.28 ns | 1462.94 ns | 0.99 | 1878.72 ns |
| single disposable and looooooong indentity chain | 24893.65 ns | 1131.15 ns | 927.82 ns | 1.22 | 5255.68 ns |
Aggregating Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+reduce(10, std::plus)+subscribe | 921.18 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
Error Handling Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe | 2137.29 ns | 1030.03 ns | 999.00 ns | 1.03 | 996.97 ns |
| create(on_error())+retry(1)+subscribe | 600.47 ns | 108.82 ns | 113.84 ns | 0.96 | 122.01 ns |
ci-macos
General
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| Subscribe empty callbacks to empty observable | 388.70 ns | 0.53 ns | 0.51 ns | 1.04 | 0.54 ns |
| Subscribe empty callbacks to empty observable via pipe operator | 403.17 ns | 0.52 ns | 0.51 ns | 1.02 | 0.52 ns |
Sources
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| from array of 1 - create + subscribe + immediate | 756.57 ns | 0.35 ns | 0.34 ns | 1.02 | 0.36 ns |
| from array of 1 - create + subscribe + current_thread | 2122.94 ns | 6.07 ns | 4.07 ns | 1.49 | 7.27 ns |
| concat_as_source of just(1 immediate) create + subscribe | 2382.73 ns | 333.94 ns | 182.51 ns | 1.83 | 295.07 ns |
| defer from array of 1 - defer + create + subscribe + immediate | 833.64 ns | 0.44 ns | 0.34 ns | 1.29 | 0.43 ns |
| interval - interval + take(3) + subscribe + immediate | 2156.11 ns | 57.06 ns | 56.14 ns | 1.02 | 58.97 ns |
| interval - interval + take(3) + subscribe + current_thread | 2629.52 ns | 34.17 ns | 34.11 ns | 1.00 | 39.18 ns |
| from array of 1 - create + as_blocking + subscribe + new_thread | 109766.00 ns | 54109.38 ns | 37261.10 ns | 1.45 | 25253.15 ns |
| from array of 1000 - create + as_blocking + subscribe + new_thread | 57506.92 ns | 29348.28 ns | 31064.52 ns | 0.94 | 35818.92 ns |
| concat_as_source of just(1 immediate) and just(1,2 immediate)create + subscribe | 6429.28 ns | 199.73 ns | 195.44 ns | 1.02 | 200.28 ns |
Filtering Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+take(1)+subscribe | 1223.18 ns | 0.51 ns | 0.34 ns | 1.51 | 0.40 ns |
| immediate_just+filter(true)+subscribe | 1871.28 ns | 0.51 ns | 0.34 ns | 1.50 | 0.35 ns |
| immediate_just(1,2)+skip(1)+subscribe | 1253.62 ns | 0.84 ns | 0.34 ns | 2.46 | 0.35 ns |
| immediate_just(1,1,2)+distinct_until_changed()+subscribe | 922.73 ns | 0.35 ns | 0.34 ns | 1.04 | 0.37 ns |
| immediate_just(1,2)+first()+subscribe | 2976.11 ns | 0.35 ns | 0.34 ns | 1.03 | 0.37 ns |
| immediate_just(1,2)+last()+subscribe | 1081.40 ns | 1.03 ns | 1.01 ns | 1.01 | 1.00 ns |
| immediate_just+take_last(1)+subscribe | 2907.62 ns | 0.52 ns | 0.34 ns | 1.52 | 0.46 ns |
| immediate_just(1,2,3)+element_at(1)+subscribe | 891.77 ns | 0.34 ns | 0.35 ns | 1.00 | 0.44 ns |
Schedulers
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate scheduler create worker + schedule | 335.25 ns | 0.52 ns | 0.51 ns | 1.02 | 0.53 ns |
| current_thread scheduler create worker + schedule | 469.91 ns | 4.29 ns | 4.11 ns | 1.04 | 5.16 ns |
| current_thread scheduler create worker + schedule + recursive schedule | 1146.03 ns | 68.88 ns | 64.83 ns | 1.06 | 91.58 ns |
Transforming Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+map(v*2)+subscribe | 909.31 ns | 2.85 ns | 4.18 ns | 0.68 | 3.55 ns |
| immediate_just+scan(10, std::plus)+subscribe | 1031.04 ns | 0.35 ns | 0.34 ns | 1.01 | 0.37 ns |
| immediate_just+flat_map(immediate_just(v*2))+subscribe | 2144.79 ns | 225.37 ns | 211.32 ns | 1.07 | 204.97 ns |
| immediate_just+buffer(2)+subscribe | 1022.23 ns | 15.88 ns | 15.78 ns | 1.01 | 16.91 ns |
| immediate_just+window(2)+subscribe + subscsribe inner | 2333.64 ns | 1095.26 ns | 2084.88 ns | 0.53 | 1087.82 ns |
Conditional Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+take_while(false)+subscribe | 899.66 ns | - | - | 0.00 | - |
| immediate_just+take_while(true)+subscribe | 905.93 ns | 0.36 ns | 0.34 ns | 1.04 | 0.37 ns |
Utility Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just(1)+subscribe_on(immediate)+subscribe | 2043.72 ns | 1.76 ns | 1.95 ns | 0.90 | 2.09 ns |
Combining Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe | 3192.61 ns | 381.83 ns | 218.18 ns | 1.75 | 267.35 ns |
| immediate_just(1) + merge_with(immediate_just(2)) + subscribe | 3624.62 ns | 224.25 ns | 214.84 ns | 1.04 | 219.01 ns |
| immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe | - | 346.42 ns | 409.60 ns | 0.85 | 230.60 ns |
| immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe | 3709.88 ns | 577.50 ns | 555.09 ns | 1.04 | 650.80 ns |
| immediate_just(1) + zip(immediate_just(2)) + subscribe | 2223.99 ns | 377.06 ns | 334.62 ns | 1.13 | 381.13 ns |
| immediate_just(immediate_just(1), immediate_just(1)) + concat() + subscribe | 3217.53 ns | 357.40 ns | 641.70 ns | 0.56 | 394.76 ns |
Subjects
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| publish_subject with 1 observer - on_next | 70.14 ns | 23.63 ns | 34.52 ns | 0.68 | 23.17 ns |
| subscribe 100 observers to publish_subject | 147208.20 ns | 19701.92 ns | 18264.12 ns | 1.08 | 18591.46 ns |
| 100 on_next to 100 observers to publish_subject | 32651.94 ns | 15105.68 ns | 11858.68 ns | 1.27 | 11672.08 ns |
Scenarios
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| basic sample | 1326.81 ns | 11.52 ns | 10.85 ns | 1.06 | 53.73 ns |
| basic sample with immediate scheduler | 1386.16 ns | 5.73 ns | 7.06 ns | 0.81 | 10.61 ns |
| mix operators with disposables and without disposables | 5973.12 ns | 1490.52 ns | 1459.24 ns | 1.02 | 1977.17 ns |
| single disposable and looooooong indentity chain | 18153.12 ns | 1771.66 ns | 2009.99 ns | 0.88 | 4113.79 ns |
Aggregating Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+reduce(10, std::plus)+subscribe | 2051.56 ns | 0.34 ns | 0.34 ns | 1.01 | 0.46 ns |
Error Handling Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe | 6516.59 ns | 3019.61 ns | 2889.43 ns | 1.05 | 7687.23 ns |
| create(on_error())+retry(1)+subscribe | 828.30 ns | 191.00 ns | 192.13 ns | 0.99 | 213.71 ns |
ci-ubuntu-clang
General
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| Subscribe empty callbacks to empty observable | 269.11 ns | 0.64 ns | 1.56 ns | 0.41 | 0.64 ns |
| Subscribe empty callbacks to empty observable via pipe operator | 270.04 ns | 0.64 ns | 1.55 ns | 0.41 | 0.64 ns |
Sources
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| from array of 1 - create + subscribe + immediate | 558.45 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| from array of 1 - create + subscribe + current_thread | 794.12 ns | 4.05 ns | 4.04 ns | 1.00 | 4.04 ns |
| concat_as_source of just(1 immediate) create + subscribe | 2426.70 ns | 130.38 ns | 131.52 ns | 0.99 | 131.07 ns |
| defer from array of 1 - defer + create + subscribe + immediate | 777.64 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| interval - interval + take(3) + subscribe + immediate | 2222.80 ns | 58.72 ns | 58.71 ns | 1.00 | 58.66 ns |
| interval - interval + take(3) + subscribe + current_thread | 3176.89 ns | 31.11 ns | 31.08 ns | 1.00 | 31.70 ns |
| from array of 1 - create + as_blocking + subscribe + new_thread | 31432.46 ns | 31016.05 ns | 29707.10 ns | 1.04 | 31522.35 ns |
| from array of 1000 - create + as_blocking + subscribe + new_thread | 39915.21 ns | 37201.96 ns | 37291.72 ns | 1.00 | 38409.59 ns |
| concat_as_source of just(1 immediate) and just(1,2 immediate)create + subscribe | 3679.11 ns | 149.28 ns | 150.32 ns | 0.99 | 148.38 ns |
Filtering Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+take(1)+subscribe | 1176.07 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just+filter(true)+subscribe | 841.22 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just(1,2)+skip(1)+subscribe | 1082.98 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just(1,1,2)+distinct_until_changed()+subscribe | 875.86 ns | 0.32 ns | 0.33 ns | 0.98 | 0.32 ns |
| immediate_just(1,2)+first()+subscribe | 1378.50 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just(1,2)+last()+subscribe | 1028.21 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just+take_last(1)+subscribe | 1195.29 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just(1,2,3)+element_at(1)+subscribe | 871.33 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
Schedulers
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate scheduler create worker + schedule | 282.12 ns | 1.55 ns | 0.64 ns | 2.44 | 1.56 ns |
| current_thread scheduler create worker + schedule | 396.24 ns | 4.04 ns | 4.35 ns | 0.93 | 4.04 ns |
| current_thread scheduler create worker + schedule + recursive schedule | 871.63 ns | 55.25 ns | 55.29 ns | 1.00 | 55.38 ns |
Transforming Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+map(v*2)+subscribe | 847.00 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
| immediate_just+scan(10, std::plus)+subscribe | 965.98 ns | 0.62 ns | 0.62 ns | 1.00 | 0.33 ns |
| immediate_just+flat_map(immediate_just(v*2))+subscribe | 2238.03 ns | 138.37 ns | 137.71 ns | 1.00 | 134.55 ns |
| immediate_just+buffer(2)+subscribe | 1537.96 ns | 13.98 ns | 13.99 ns | 1.00 | 14.92 ns |
| immediate_just+window(2)+subscribe + subscsribe inner | 2452.81 ns | 906.48 ns | 910.87 ns | 1.00 | 912.38 ns |
Conditional Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+take_while(false)+subscribe | 851.13 ns | - | - | 0.00 | - |
| immediate_just+take_while(true)+subscribe | 853.32 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
Utility Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just(1)+subscribe_on(immediate)+subscribe | 2193.47 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
Combining Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe | 3317.72 ns | 160.01 ns | 160.12 ns | 1.00 | 154.63 ns |
| immediate_just(1) + merge_with(immediate_just(2)) + subscribe | 3773.31 ns | 140.18 ns | 138.59 ns | 1.01 | 139.21 ns |
| immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe | - | 143.07 ns | 142.88 ns | 1.00 | 139.02 ns |
| immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe | 3448.19 ns | 379.45 ns | 380.46 ns | 1.00 | 379.45 ns |
| immediate_just(1) + zip(immediate_just(2)) + subscribe | 2218.10 ns | 198.14 ns | 200.78 ns | 0.99 | 200.41 ns |
| immediate_just(immediate_just(1), immediate_just(1)) + concat() + subscribe | 3284.72 ns | 224.49 ns | 223.42 ns | 1.00 | 228.20 ns |
Subjects
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| publish_subject with 1 observer - on_next | 52.59 ns | 19.85 ns | 19.75 ns | 1.00 | 20.36 ns |
| subscribe 100 observers to publish_subject | 207393.40 ns | 17444.93 ns | 17680.07 ns | 0.99 | 18210.19 ns |
| 100 on_next to 100 observers to publish_subject | 46109.42 ns | 20274.50 ns | 20240.20 ns | 1.00 | 20511.80 ns |
Scenarios
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| basic sample | 1331.75 ns | 11.50 ns | 11.49 ns | 1.00 | 20.81 ns |
| basic sample with immediate scheduler | 1325.72 ns | 5.90 ns | 5.90 ns | 1.00 | 6.52 ns |
| mix operators with disposables and without disposables | 6517.22 ns | 1160.93 ns | 1176.31 ns | 0.99 | 1477.36 ns |
| single disposable and looooooong indentity chain | 27916.58 ns | 1249.03 ns | 1250.16 ns | 1.00 | 4709.30 ns |
Aggregating Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+reduce(10, std::plus)+subscribe | 1043.21 ns | 0.31 ns | 0.31 ns | 1.00 | 0.31 ns |
Error Handling Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe | 2182.24 ns | 1170.05 ns | 1161.20 ns | 1.01 | 1182.18 ns |
| create(on_error())+retry(1)+subscribe | 661.77 ns | 139.35 ns | 146.86 ns | 0.95 | 140.39 ns |
ci-windows
General
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| Subscribe empty callbacks to empty observable | 556.07 ns | 2.16 ns | 2.16 ns | 1.00 | 1.85 ns |
| Subscribe empty callbacks to empty observable via pipe operator | 572.10 ns | 2.16 ns | 2.16 ns | 1.00 | 1.85 ns |
Sources
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| from array of 1 - create + subscribe + immediate | 1155.57 ns | 4.93 ns | 4.94 ns | 1.00 | 5.55 ns |
| from array of 1 - create + subscribe + current_thread | 1419.82 ns | 15.75 ns | 15.74 ns | 1.00 | 15.45 ns |
| concat_as_source of just(1 immediate) create + subscribe | 3696.46 ns | 174.60 ns | 174.62 ns | 1.00 | 178.05 ns |
| defer from array of 1 - defer + create + subscribe + immediate | 1180.65 ns | 5.24 ns | 5.24 ns | 1.00 | 5.24 ns |
| interval - interval + take(3) + subscribe + immediate | 3736.36 ns | 139.81 ns | 139.74 ns | 1.00 | 142.29 ns |
| interval - interval + take(3) + subscribe + current_thread | 3460.30 ns | 60.15 ns | 59.86 ns | 1.00 | 62.80 ns |
| from array of 1 - create + as_blocking + subscribe + new_thread | 123175.00 ns | 118700.00 ns | 120400.00 ns | 0.99 | 119788.89 ns |
| from array of 1000 - create + as_blocking + subscribe + new_thread | 132655.56 ns | 135675.00 ns | 136975.00 ns | 0.99 | 137275.00 ns |
| concat_as_source of just(1 immediate) and just(1,2 immediate)create + subscribe | 5329.67 ns | 206.57 ns | 201.39 ns | 1.03 | 215.13 ns |
Filtering Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+take(1)+subscribe | 1818.86 ns | 19.42 ns | 19.42 ns | 1.00 | 21.36 ns |
| immediate_just+filter(true)+subscribe | 1610.58 ns | 18.50 ns | 18.51 ns | 1.00 | 21.59 ns |
| immediate_just(1,2)+skip(1)+subscribe | 2008.80 ns | 17.89 ns | 17.91 ns | 1.00 | 21.60 ns |
| immediate_just(1,1,2)+distinct_until_changed()+subscribe | 1328.95 ns | 20.67 ns | 20.68 ns | 1.00 | 26.86 ns |
| immediate_just(1,2)+first()+subscribe | 2372.16 ns | 18.20 ns | 18.21 ns | 1.00 | 19.43 ns |
| immediate_just(1,2)+last()+subscribe | 1464.98 ns | 19.13 ns | 19.15 ns | 1.00 | 22.84 ns |
| immediate_just+take_last(1)+subscribe | 2023.02 ns | 64.85 ns | 64.93 ns | 1.00 | 70.17 ns |
| immediate_just(1,2,3)+element_at(1)+subscribe | 1622.12 ns | 20.97 ns | 20.98 ns | 1.00 | 21.63 ns |
Schedulers
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate scheduler create worker + schedule | 477.39 ns | 4.32 ns | 4.32 ns | 1.00 | 4.32 ns |
| current_thread scheduler create worker + schedule | 648.68 ns | 11.11 ns | 11.11 ns | 1.00 | 11.11 ns |
| current_thread scheduler create worker + schedule + recursive schedule | 1079.50 ns | 103.96 ns | 101.36 ns | 1.03 | 103.12 ns |
Transforming Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+map(v*2)+subscribe | 1328.23 ns | 18.80 ns | 18.80 ns | 1.00 | 21.63 ns |
| immediate_just+scan(10, std::plus)+subscribe | 1422.12 ns | 20.96 ns | 20.96 ns | 1.00 | 23.80 ns |
| immediate_just+flat_map(immediate_just(v*2))+subscribe | 3837.33 ns | 186.30 ns | 185.11 ns | 1.01 | 223.46 ns |
| immediate_just+buffer(2)+subscribe | 2291.50 ns | 64.26 ns | 63.51 ns | 1.01 | 72.33 ns |
| immediate_just+window(2)+subscribe + subscsribe inner | 3974.07 ns | 1216.92 ns | 1192.15 ns | 1.02 | 1226.57 ns |
Conditional Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+take_while(false)+subscribe | 1305.28 ns | 17.57 ns | 17.57 ns | 1.00 | 19.13 ns |
| immediate_just+take_while(true)+subscribe | 1329.92 ns | 18.50 ns | 18.50 ns | 1.00 | 21.60 ns |
Utility Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just(1)+subscribe_on(immediate)+subscribe | 3205.02 ns | 11.10 ns | 11.11 ns | 1.00 | 11.11 ns |
Combining Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe | 5054.46 ns | 197.43 ns | 195.27 ns | 1.01 | 222.13 ns |
| immediate_just(1) + merge_with(immediate_just(2)) + subscribe | 5710.11 ns | 186.78 ns | 178.89 ns | 1.04 | 204.81 ns |
| immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe | - | 195.15 ns | 194.65 ns | 1.00 | 199.56 ns |
| immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe | 6119.16 ns | 444.60 ns | 443.65 ns | 1.00 | 489.05 ns |
| immediate_just(1) + zip(immediate_just(2)) + subscribe | 3865.37 ns | 538.25 ns | 519.56 ns | 1.04 | 516.04 ns |
| immediate_just(immediate_just(1), immediate_just(1)) + concat() + subscribe | 4853.97 ns | 314.42 ns | 314.38 ns | 1.00 | 325.14 ns |
Subjects
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| publish_subject with 1 observer - on_next | 36.72 ns | 29.42 ns | 29.27 ns | 1.01 | 30.01 ns |
| subscribe 100 observers to publish_subject | 264250.00 ns | 25013.33 ns | 25450.00 ns | 0.98 | 24830.23 ns |
| 100 on_next to 100 observers to publish_subject | 51881.82 ns | 35939.39 ns | 35922.58 ns | 1.00 | 32997.22 ns |
Scenarios
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| basic sample | 1853.25 ns | 96.57 ns | 96.80 ns | 1.00 | 112.11 ns |
| basic sample with immediate scheduler | 1857.89 ns | 66.73 ns | 68.51 ns | 0.97 | 82.35 ns |
| mix operators with disposables and without disposables | 9381.75 ns | 1787.22 ns | 1797.99 ns | 0.99 | 2439.19 ns |
| single disposable and looooooong indentity chain | 25641.46 ns | 1655.18 ns | 1630.37 ns | 1.02 | 6267.21 ns |
Aggregating Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| immediate_just+reduce(10, std::plus)+subscribe | 1458.16 ns | 19.11 ns | 19.11 ns | 1.00 | 22.83 ns |
Error Handling Operators
| name | rxcpp | rpp | prev rpp | ratio | rpp no optimization |
|---|---|---|---|---|---|
| create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe | 1896.36 ns | 357.24 ns | 353.06 ns | 1.01 | 380.86 ns |
| create(on_error())+retry(1)+subscribe | 1721.11 ns | 138.15 ns | 137.92 ns | 1.00 | 139.85 ns |
Summary by CodeRabbit